import { request, downloadBlobFile } from 'src/utils';

export interface LogDto {
  logId: IdType; // 日志ID
  operateType: number; // 操作类型
  logTitle: string; // 日志类别(简短描述)
  logContent: string; // 日志内容
  requestPath: string; // 请求URL
  requestMethod: string; // 请求方式
  requestParam: string; // 请求参数
  success: boolean; // 是否执行成功
  executeTime: number; // 执行时长,毫秒
  clientIp: string; // 客户端IP
  clientOs: string; // 客户端操作系统
  clientBrowser: string; // 客户端浏览器
  createdBy: string; // 操作人
  createdTime: Date; // 操作时间
}

const baseUrl = '/api/system/log';

/**
 * 查单个
 */
export function readData(logId: IdType): Promise<LogDto> {
  return request.get(baseUrl + '/' + logId);
}

/**
 * 查集合
 */
export function queryList(query: PageQuery): Promise<PageResult<LogDto>> {
  return request.get(baseUrl, { params: query });
}

/**
 * 新增，修改
 */
export function saveOrUpdate(log: LogDto): Promise<LogDto> {
  return log.logId ? request.put(baseUrl + '/' + log.logId, log) : request.post(baseUrl, log);
}

/**
 * 删除
 */
export function deleteByIds(ids: IdType[]): Promise<void> {
  return request.delete(baseUrl, { params: { ids } });
}

/**
 * 查集合
 */
export function clearLogs(query: PageQuery): Promise<void> {
  return request.delete(baseUrl + '/clear', { params: query });
}

/**
 * 导出
 */
export function exportData(query: PageQuery): Promise<void> {
  return new Promise((resolve, reject) => {
    request
      .get(baseUrl + '/export', { params: query, responseType: 'blob' })
      .then((res) => {
        downloadBlobFile(res);
        resolve();
      })
      .catch((err) => reject(err));
  });
}

export default { readData, queryList, deleteByIds, exportData } as CrudApi<LogDto>;
